/*
 * ParserCurso.java
 *
 * Created on 26 de mayo de 2005, 07:53
 * Modificando version: Diego Atayra
 */

package xml;

import java.util.Date;

//
//import org.xml.sax.SAXException;
//import org.xml.sax.SAXParseException;
//import org.xml.sax.helpers.DefaultHandler;
//
//import util.Validaciones;
//import xml.parserSAX.SaxException;
//import Clases.Atributo;
//import estructura_de_Clases.DetallePedido;
//import estructura_de_Clases.ListadoPedidos;
//import estructura_de_Clases.ListadoProductos;
//import estructura_de_Clases.Pedido;
//import estructura_de_Clases.Producto;
//
///**
// *
// * @author Albera Marcos; Nicolelli Facundo
// *
// */
public class PedidoSAXHandler
{
//	//Variable global a la clase para definir el tipo de etiqueta y/o tag.
//	private String etiqueta;
//	//Variable que me identifica de que tipo de producto se trata (de un Producto o un Componente)
//	private String tipo;
//	//Instancia de ListadoPedidos que se va a cargar
//	private ListadoPedidos listaPedidos;
//	//Instancia de Pedido que se va cargando a medida que proceso el archivo XML
//	private Pedido pedido;
//	//Instancia de DetallePedido que se va cargando a medida que proceso la etiqueta "Detalle"
//	private DetallePedido detallePedido;
//	//Instancia del Producto que se va cargando junto con el detalle
//	private Producto producto;
//	//Instancia del Componente de Producto que se va cargando junto con el detalle
//	private Producto componente;
//	//Al terminar el tag, se toma el contenido del buffer
//	private StringBuffer mBuffer;
//	//Instancia de ListadoProductos que se va a cargar
//	private ListadoProductos listadoProductos;
//	//Variable para saber si entra por listado de Pedidos o de Producto
//	private String tipoListado;
//	//Invento de Marcos y sirbe
//	private int numeroTag = 0;
//
//	//Creo el ErroHandler, que es mi manejador de errores de SAX
//	//PedidosSAXErroHandler errorHandler = new PedidosSAXErroHandler();
//
//	public PedidoSAXHandler() {
//		super();
//		// TODO Auto-generated constructor stub
//	}
//
//	public ListadoPedidos getListaPedidos()
//    {
//    	return listaPedidos;
//    }
//
//	public ListadoProductos getListadoProductos()
//	{
//		return listadoProductos;
//	}
//
//
//    /**
//     * Cuando el analizador encuentre un simbolo ("<") se ejecutara el metodo startElemnt para procesarlo.
//	 * @param qName nombre cualificado (con prefijo de espacio de nombre); se utiliza si la propuedad
//	 * "namespace-prefixes" es tru.
//	 * @param attributes son los atrubutos del elemento (de la etiqueta).
//     * @throws org.xml.sax.SAXException dispara una Exception cuando se produce algun erro.
//     */
//    public void startElement (String qName, Atributo attributes) throws SaxException
//    {
//    	//Si esta empezando la Lista de Pedidos, creo una nueva instancia de ListaPedidos
//    	//y le asigno el nombre a la etiqueta.
//    	if (qName.equals("ListadoPedidos"))
//    	{
//    		listaPedidos = new ListadoPedidos();
//    		if(attributes.getNombre().equals("numero")){
//    			listaPedidos.setNumero(Integer.parseInt(attributes.getValor()));
//    		}
//    		tipoListado = "listadoPedidos";
//    	}
//
//    	//Si esta empezando la Lista de Productos, creo una nueva instancia de ListaProducto
//    	//y le asigno el nombre a la etiqueta.
//    	if (qName.equals("ListadoProductos"))
//    	{
//    		listadoProductos = new ListadoProductos();
//    		if(attributes.getNombre().equals("numero")){
//    			listadoProductos.setNumero(Integer.parseInt(attributes.getValor()));
//    		}
//    		tipoListado = "listadoProducto";
//    	}
//
//    	//Si esta empezando un Pedido, creo una nueva instancia de Pedido
//    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
//    	//y le asigno el pedido a al listado de Pedidos.
//    	if (qName.equals("Pedido"))
//    	{
//    		pedido = new Pedido();
//    		etiqueta = "Pedido";
//    		//listaPedidos.addPedido(pedido); //asigno el pedido a al listado de Pedidos
//    	}
//
//    	//Si esta empezando el Detalle de Pedido, creo una nueva instancia de DetallePedido,
//    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
//    	//y por ultimo le asigno el pedido al detalle.
//    	if (qName.equals("Detalle"))
//    	{
//    		detallePedido = new DetallePedido();
//    		etiqueta = "Detalle";
//    		detallePedido.setPedido(pedido);//Esto le dice al Detalle de Pedido a que Pedido corresponde
//    	}
//
//    	//Si encuentra un Producto, creo una nueva instancia de Producto, que se va a ir
//    	//cargando al detalle y al producto segun sea o no un componente de producto.
//    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
//    	if (qName.equals("Producto"))
//    	{
//    		etiqueta = "Producto";
//    		numeroTag++;
//
//    		//Pregunto si el producto es de tipo producto o componente.
//    		if(attributes.getNombre().equals("tipo") && attributes.getValor().equals("Producto")){
//
//    			producto = new Producto();
//
//    			if(tipoListado.equals("listadoPedidos"))
//    			{
//    				//si es de tipo producto asigno el mismo a Detalle
//    				detallePedido.setProducto(producto);
//    				numeroTag--;
//    			}
//    			//el tipo es producto
//				tipo = attributes.getValor();
//    		}
//    		else if(attributes.getNombre().equals("tipo") && attributes.getValor().equals("Componente"))
//    		{
//    			componente = new Producto();
//
//    			//El tipo es Componente.
//    			tipo = attributes.getValor();
//    		}
//    	}
//
//    	//Vacio el contenido del Buffer.
//    	mBuffer = new StringBuffer();
//    }
//
//    /**
//     * Cuando el analizador encuentre un simbolo ("</") se ejecutara el metodo endElemnt para procesarlo.
//     * @param uri nombre URL, puede no ser procesado.
//	 * @param localName es el nombre del elemento (la etiqueta).
//	 * @param qName nombre cualificado (con prefijo de espacio de nombre); se utiliza si la propuedad
//	 * "namespace-prefixes" es tru.
//     * @throws org.xml.sax.SAXException dispara una Exception cuando se produce algun erro.
//     */
//    public void endElement (String uri, String localName, String qName) throws SaxException
//    {
//    	//Pregunto el tipo de etiqueta que encontro es Pedido para procesar sus atributos
//    	if(etiqueta.equals("Pedido"))
//    	{
//    		//Si llega el fin del tag numero, tomo todo el contenido del buffer y asigno el numero al pedio
//    		if(qName.equals("Numero"))
//    		{
//    			pedido.setNumero(Integer.parseInt(mBuffer.toString()));
//    		}
//
//    		//Si llega el fin del tag fecha, tomo todo el contenido del buffer y asigno la fecha al pedio
//    		if(qName.equals("Fecha"))
//    		{
//    			//Date date = new Date(mBuffer.toString());
//    			pedido.setFechaPedido(new Date(mBuffer.toString()));
//    		}
//    		//Si llega el fin del tag proveedor, tomo todo el contenido del buffer y asigno el proveedor al pedio
//    		if(qName.equals("Proveedor"))
//    		{
//    			pedido.setProveedor(mBuffer.toString());
//    		}
//    	}
//
//    	//Si llega el final del tag pedido, agrego el pedido a la lista de pedidos.
//    	if(qName.equals("Pedido"))
//		{
//			listaPedidos.addPedido(pedido); //agrego el pedido a al listado de Pedidos
//		}
//
//    	//Pregunto el tipo de etiqueta que encontro es Detalle para procesar sus atributos
//    	if(etiqueta.equals("Detalle"))
//    	{
//    		//Si llega el fin del tag numero, tomo el contenido del buffer y asigno el numeor al detalle
//    		if(qName.equals("Numero"))
//    		{
//    			detallePedido.setNumero(Integer.parseInt(mBuffer.toString()));
//    		}
//
//    		//Si llega el fin del tag cantidad, tomo el contenido del buffer y asigno la cantidad al detalle
//    		if(qName.equals("Cantidad"))
//    		{
//    			detallePedido.setCantidad(Integer.parseInt(mBuffer.toString()));
//    		}
//
//    	}
//
//    	//Si llega el fin del tag Detalle, agrego ese detalle a la listas de detalle del Pedido
//		if(qName.equals("Detalle"))
//		{
//			pedido.addDetallePedido(detallePedido);//Esto agrega el Detalle creado a la lista de Detalles del Pedido
//		}
//
//    	//Pregunto el tipo de etiqueta que encontro es Producto para procesar sus atributos
//    	if(etiqueta.equals("Producto"))
//    	{
//    		if(tipo.equals("Producto"))
//    		{
//    			//Si llega el fin del tag codigo, tomo el contenido del buffer y asigno el codigo al Producto
//        		if(qName.equals("Codigo"))
//        		{
//        			producto.setCodigo(Integer.parseInt(mBuffer.toString()));
//        		}
//
//        		//Si llega el fin del tag nombre, tomo el contenido del buffer y asigno el nombre al Producto
//        		if(qName.equals("Nombre"))
//        		{
//        			producto.setNombre(mBuffer.toString());
//        		}
//
//        		//Si llega el fin del tag precio, tomo el contenido del buffer y asigno el precio al Producto.
//        		if(qName.equals("Precio"))
//        		{
//        			producto.setPrecioCosto(Float.parseFloat(mBuffer.toString()));
//        		}
//
//        		//Si llega el fin del tag porcentaje de venta, tomo el contenido del buffer y asigno el porcentaje al Producto.
//        		if(qName.equals("PorcentajeVenta"))
//        		{
//        			producto.setPorcentajeVenta(Float.parseFloat(mBuffer.toString()));
//        		}
//
//        		if(qName.equals("Producto") && tipoListado.equals("listadoProducto"))
//        		{
//        			//si es de tipo componete agrego el mismo a la lista de componentes del Producto
//        			listadoProductos.addProducto(producto);
//        			tipo = "";
//        			numeroTag--;
//        		}
//
//    		}
//    		else if(tipo.equals("Componente"))
//    		{
//    			//Si llega el fin del tag codigo, tomo el contenido del buffer y asigno el codigo al Producto
//        		if(qName.equals("Codigo"))
//        		{
//        			componente.setCodigo(Integer.parseInt(mBuffer.toString()));
//        		}
//
//        		//Si llega el fin del tag nombre, tomo el contenido del buffer y asigno el nombre al Producto
//        		if(qName.equals("Nombre"))
//        		{
//        			componente.setNombre(mBuffer.toString());
//        		}
//
//        		//Si llega el fin del tag precio, tomo el contenido del buffer y asigno el precio al Producto.
//        		if(qName.equals("Precio"))
//        		{
//        			componente.setPrecioCosto(Float.parseFloat(mBuffer.toString()));
//        		}
//
//        		//Si llega el fin del tag porcentaje de venta, tomo el contenido del buffer y asigno el porcentaje al Producto.
//        		if(qName.equals("PorcentajeVenta"))
//        		{
//        			componente.setPorcentajeVenta(Float.parseFloat(mBuffer.toString()));
//        		}
//
//        		//Si llega el fin del tag producto y el tipo de producto era componente, entonces
//        		//agrego el mimso a la lista de componentes del Producto Padre
//        		if(qName.equals("Producto") && tipoListado.equals("listadoProducto") && numeroTag == 1)
//        		{
//        			//si es de tipo producto agrego el mismo a la lista de Productos
//        			listadoProductos.addProducto(producto);
//        			tipo = "";
//        			numeroTag--;
//        		}
//        		else
//        		{
//        			//Se trabaja de estas dos formas debido a que el primer if me agrega el producto apenas creeo el detalle y
//        			//el segundo lo agrega a la lista utilizando el Productos.xml
//        			if(qName.equals("Producto") && numeroTag == 1){
//        				//si es de tipo componete, y tipo de lista es "listadoPedido", agrego el mismo a la lista de componentes del Producto
//        				producto.addComponente(componente);
//        				numeroTag--;
//        			}else if (qName.equals("Producto") && tipoListado.equals("listadoProducto")) {
//        				//si es de tipo componete y tipo de lista es "listadoProducto", agrego el mismo a la lista de componentes del Producto
//        				producto.addComponente(componente);
//        				numeroTag--;
//					}
//
//        		}
//    		}
//
//    	}
//    }
//
//    /**
//     * Cuando le analizador encuentra caracteres de datos llama a este metodo para que los procese.
//     * @param ch son los caracteres del documento.
//     */
//     public void characters (String ch)
//    {
//    	//Guardo en el buffer lo que recibo.
//    	//Llegado el fin del tag se toma el contenido del buffer.
//    	mBuffer.append(ch);
//    }
//
//    /*
//     * (non-Javadoc)
//     * @see org.xml.sax.helpers.DefaultHandler#warning(org.xml.sax.SAXParseException)
//     * Aca arrancan los metodos del API ErrorHandler
//     */
//
//    /**
//     * Este metodo se encarga de manejar las advertencias detectadas durante el Parsing.
//     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
//     */
//    public void warning(SAXParseException exception) throws SAXException {
//        System.out.println("Advertencia"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//        throw new SAXException("Advertencia"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//    }
//
//    /**
//     * Este metodo se encarga de manejar los errores de formato, ocurridos durante el Parsing.
//     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
//     */
//    public void error(SAXParseException exception) throws SAXException {
//        System.out.println("Error de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//        throw new SAXException("Error de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//    }
//
//    /**
//     * Este metodo se encarga de manejar los errres fatales, ocurridos durante el Parsing.
//     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
//     */
//    public void fatalError(SAXParseException exception) throws SAXException {
//    	System.out.println("Error Fatal de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//    	throw new SAXException("Error Fatal de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
//    }
//
}
